/**
 * 懒汉模式
 * 懒汉单例模式在第一次调用 getInstance 方法时，实例化 LazySingleton 对象，在类加载时并不自行实例化，
 * 这种技术称为延迟加载技术（Lazy Load），即在需要的时候进行加载实例
 * @author ZhouWeiBo
 * @create 2022/6/6
 */
public class LazySingleton {
    /**
     * 增加 volatile 修饰符的作用是:
     * 保证多个线程都能够正确处理被 volatile 修饰的静态成员变量，即 volatile 禁止指令重排序，
     * 保证了其修饰的静态成员变量 doubleCheckLazySingleton 的内存可见性，从而实现线程安全
     */
    private static volatile OssProperties OSS = null;

    public LazySingleton() {
    }

    public static OssProperties getInstance(){
        if (OSS == null){
            /* 在 synchronized 锁定的代码中再进行一次 OSS == null 的判断，这样就可保证线程安全 */
            synchronized (LazySingleton.class){
                if (OSS == null){
                    OSS = new OssProperties();
                }
            }
        }
        return OSS;
    }
}
